{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# 数据读取及基本处理\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# plotting\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1</td>\n",
       "      <td>296</td>\n",
       "      <td>15</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM  ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \\\n",
       "0  0.00632  18   2.31     0  0.538  6.575  65.2  4.0900    1  296       15   \n",
       "1  0.02731   0   7.07     0  0.469  6.421  78.9  4.9671    2  242       17   \n",
       "2  0.02729   0   7.07     0  0.469  7.185  61.1  4.9671    2  242       17   \n",
       "3  0.03237   0   2.18     0  0.458  6.998  45.8  6.0622    3  222       18   \n",
       "4  0.06905   0   2.18     0  0.458  7.147  54.2  6.0622    3  222       18   \n",
       "\n",
       "        B  LSTAT  MEDV  \n",
       "0  396.90   4.98  24.0  \n",
       "1  396.90   9.14  21.6  \n",
       "2  392.83   4.03  34.7  \n",
       "3  394.63   2.94  33.4  \n",
       "4  396.90   5.33  36.2  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#dpath = \"./data/\"\n",
    "df = pd.read_csv(\"/Users/likai/Documents/AI 学习资料/课件PPT/机器学习/第二章线性回归/BostonHousePrice_CodeData/boston_housing.csv\")\n",
    "\n",
    "#显示前5行\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 对连续型特征，可以用哪个函数可视化其分布？\n",
    "直方图：sns.distplot()\n",
    "\n",
    "箱型图：sns.boxplot()\n",
    "\n",
    "提琴图：sns.violinplot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 目标y（房屋价格）的直方图／分布\n",
    "fig = plt.figure()\n",
    "sns.distplot(df[\"MEDV\"], bins=30, kde=True)\n",
    "plt.xlabel(\"Median value of owner-occupied homes\", fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, axes = plt.subplots(1, 2, sharey=True, figsize=(6, 4))\n",
    "sns.boxplot(data=df[\"MEDV\"], ax=axes[0]); \n",
    "sns.violinplot(data=df[\"MEDV\"], ax=axes[1]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以使用corr()函数得到矩阵中两两特征的相关系数。 并使用hearmap画出相关系数热图 DataFrame的corr()方法先计算出每对特征间的相关矩阵\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1389a5690>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#get the names of all the columns\n",
    "cols = df.columns \n",
    "\n",
    "# Calculates pearson co-efficient for all combinations，通常认为相关系数大于0.5的为强相关\n",
    "data_corr = df.corr()\n",
    "sns.heatmap(data_corr,annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果特征之间高度相关，可考虑进行PCA降维（特征层面）或加正则项（模型层面）\n",
    "\n",
    "如果两个特征的相关性特别强，比如绝对值高于0.9，则可以考虑只保留其中一个特征以达到降维的目的。\n",
    "\n",
    "或者在选用模型时加入L1正则项以在训练模型的时候自动淘汰一些特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 ，并重新训练最小二乘线性回归、岭回归、和Lasso模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1</td>\n",
       "      <td>296</td>\n",
       "      <td>15</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM  ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \\\n",
       "0  0.00632  18   2.31     0  0.538  6.575  65.2  4.0900    1  296       15   \n",
       "1  0.02731   0   7.07     0  0.469  6.421  78.9  4.9671    2  242       17   \n",
       "2  0.02729   0   7.07     0  0.469  7.185  61.1  4.9671    2  242       17   \n",
       "3  0.03237   0   2.18     0  0.458  6.998  45.8  6.0622    3  222       18   \n",
       "4  0.06905   0   2.18     0  0.458  7.147  54.2  6.0622    3  222       18   \n",
       "\n",
       "        B  LSTAT  MEDV  \n",
       "0  396.90   4.98  24.0  \n",
       "1  396.90   9.14  21.6  \n",
       "2  392.83   4.03  34.7  \n",
       "3  394.63   2.94  33.4  \n",
       "4  396.90   5.33  36.2  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 从原始数据中分离输入特征x和输出y\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV', axis = 1)\n",
    "\n",
    "# 尝试对y（房屋价格）做log变换，对log变换后的价格进行估计\n",
    "log_y = np.log1p(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# RAD的含义是距离高速公路的便利指数。虽然给的数值是数值型，但实际是索引，可换成离散特征/类别型特征编码试试。\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "X_cat = X[\"RAD\"]\n",
    "X_cat = pd.get_dummies(X_cat, prefix=\"RAD\")\n",
    "\n",
    "X = X.drop(\"RAD\", axis = 1)\n",
    "\n",
    "#特征名称，用于保存特征工程结果\n",
    "feat_names = X.columns\n",
    "\n",
    "# 数据标准化\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# 分别初始化对特征和目标值的标准化器\n",
    "ss_X = MinMaxScaler()\n",
    "ss_y = MinMaxScaler()\n",
    "\n",
    "ss_log_y = MinMaxScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征以及目标值进行标准化处理\n",
    "# 对训练数据，先调用fit方法训练模型，得到模型参数；然后对训练数据和测试数据进行transform\n",
    "X = ss_X.fit_transform(X)\n",
    "\n",
    "#对y做标准化不是必须\n",
    "#对y标准化的好处是不同问题的w差异不太大，同时正则参数的范围也有限\n",
    "y = ss_y.fit_transform(y.values.reshape(-1, 1))\n",
    "log_y = ss_y.fit_transform(log_y.values.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "fe_data = pd.DataFrame(data = X, columns = feat_names, index = df.index)\n",
    "fe_data = pd.concat([fe_data, X_cat], axis = 1, ignore_index=False)\n",
    "\n",
    "#加上标签y\n",
    "fe_data[\"MEDV\"] = y\n",
    "fe_data[\"log_MEDV\"] = log_y\n",
    "\n",
    "#保存结果到文件\n",
    "fe_data.to_csv('/Users/likai/Documents/AI 学习资料/课件PPT/机器学习/第二章线性回归/BostonHousePrice_CodeData/FE_MinMaxScaler_boston_housing.csv', index=False)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.422222</td>\n",
       "      <td>0.666856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.368889</td>\n",
       "      <td>0.619696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.660000</td>\n",
       "      <td>0.833335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.631111</td>\n",
       "      <td>0.816001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.693333</td>\n",
       "      <td>0.852567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  \\\n",
       "0  0.208015      0.3  ...      0      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "\n",
       "   RAD_24      MEDV  log_MEDV  \n",
       "0       0  0.422222  0.666856  \n",
       "1       0  0.368889  0.619696  \n",
       "2       0  0.660000  0.833335  \n",
       "3       0  0.631111  0.816001  \n",
       "4       0  0.693333  0.852567  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "# path to where the data lies\n",
    "#dpath = './data/'\n",
    "df = pd.read_csv(\"/Users/likai/Documents/AI 学习资料/课件PPT/机器学习/第二章线性回归/BostonHousePrice_CodeData/FE_MinMaxScaler_boston_housing.csv\")\n",
    "\n",
    "#通过观察前5行，了解数据每列（特征）的概况\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(404, 12)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>[0.5151029311609588]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>[0.10018779477777567]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>[0.07838495483584375]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>[0.06932750623049581]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>[0.007636173067164825]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>[-0.01601725227529463]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>[-0.03566506855133818]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>[-0.12404001255162905]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>[-0.1385290817009251]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>[-0.14637245488459125]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>[-0.37826036389911566]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>[-0.46676495612966323]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns                    coef\n",
       "5        RM    [0.5151029311609588]\n",
       "1        ZN   [0.10018779477777567]\n",
       "3      CHAS   [0.07838495483584375]\n",
       "10        B   [0.06932750623049581]\n",
       "8       TAX  [0.007636173067164825]\n",
       "6       AGE  [-0.01601725227529463]\n",
       "2     INDUS  [-0.03566506855133818]\n",
       "4       NOX  [-0.12404001255162905]\n",
       "0      CRIM   [-0.1385290817009251]\n",
       "9   PTRATIO  [-0.14637245488459125]\n",
       "7       DIS  [-0.37826036389911566]\n",
       "11    LSTAT  [-0.46676495612966323]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性回归\n",
    "#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 1.使用默认配置初始化学习器实例\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 2.用训练数据训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "# 3. 用训练好的模型对测试集进行预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is ：0.67840141843653467557\n",
      "The r2 score of LinearRegression on train is ：0.73276117704374699180\n"
     ]
    }
   ],
   "source": [
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print(\"The r2 score of LinearRegression on test is ：%.20f\" %r2_score(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print(\"The r2 score of LinearRegression on train is ：%.20f\" %r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布，看是否符合模型假设：噪声为0均值的高斯噪声\n",
    "f, ax = plt.subplots(figsize=(7, 5)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_lr, bins=40, label='Residuals Linear', color='b', alpha=.5); \n",
    "ax.set_title(\"Histogram of Residuals\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is ：0.70007525810491855189\n",
      "The r2 score of RidgeCV on train is ：0.72919503429302467978\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#1. 设置超参数（正则参数）范围\n",
    "alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "#n_alphas = 20\n",
    "#alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#2. 生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#3. 模型训练\n",
    "ridge.fit(X_train, y_train)    \n",
    "\n",
    "#4. 预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print(\"The r2 score of RidgeCV on test is ：%.20f\" %r2_score(y_test, y_test_pred_ridge))\n",
    "print(\"The r2 score of RidgeCV on train is ：%.20f\" %r2_score(y_train, y_train_pred_ridge))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 1.0\n"
     ]
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "print ('alpha is:', ridge.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>[0.5151029311609588]</td>\n",
       "      <td>[0.46559729233494607]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>[0.10018779477777567]</td>\n",
       "      <td>[0.0828682003100277]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>[0.07838495483584375]</td>\n",
       "      <td>[0.07755926061896923]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>[0.06932750623049581]</td>\n",
       "      <td>[0.07109040560503967]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>[0.007636173067164825]</td>\n",
       "      <td>[-0.0037058307682041464]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>[-0.01601725227529463]</td>\n",
       "      <td>[-0.009662811098103297]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>[-0.03566506855133818]</td>\n",
       "      <td>[-0.03945151687432556]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>[-0.12404001255162905]</td>\n",
       "      <td>[-0.09357594454221778]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>[-0.1385290817009251]</td>\n",
       "      <td>[-0.10270045530118083]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>[-0.14637245488459125]</td>\n",
       "      <td>[-0.15163578675419334]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>[-0.37826036389911566]</td>\n",
       "      <td>[-0.2992719405522699]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>[-0.46676495612966323]</td>\n",
       "      <td>[-0.44808971188918206]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns                 coef_lr                coef_ridge\n",
       "5        RM    [0.5151029311609588]     [0.46559729233494607]\n",
       "1        ZN   [0.10018779477777567]      [0.0828682003100277]\n",
       "3      CHAS   [0.07838495483584375]     [0.07755926061896923]\n",
       "10        B   [0.06932750623049581]     [0.07109040560503967]\n",
       "8       TAX  [0.007636173067164825]  [-0.0037058307682041464]\n",
       "6       AGE  [-0.01601725227529463]   [-0.009662811098103297]\n",
       "2     INDUS  [-0.03566506855133818]    [-0.03945151687432556]\n",
       "4       NOX  [-0.12404001255162905]    [-0.09357594454221778]\n",
       "0      CRIM   [-0.1385290817009251]    [-0.10270045530118083]\n",
       "9   PTRATIO  [-0.14637245488459125]    [-0.15163578675419334]\n",
       "7       DIS  [-0.37826036389911566]     [-0.2992719405522699]\n",
       "11    LSTAT  [-0.46676495612966323]    [-0.44808971188918206]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is ：0.68156327895752855106\n",
      "The r2 score of LassoCV on train is ：0.73228931099757699208\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/sklearn/linear_model/_coordinate_descent.py:1088: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "#alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#2. 生成学习器实例\n",
    "#lasso = LassoCV(alphas=alphas)\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "#Lasso可以自动确定最大的alpha，所以另一种设置alpha的方式是设置最小的alpha值（eps） 和 超参数的数目（n_alphas），\n",
    "#然后LassoCV对最小值和最大值之间在log域上均匀取值n_alphas个\n",
    "# np.logspace(np.log10(alpha_max * eps), np.log10(alpha_max),num=n_alphas)[::-1]\n",
    "\n",
    "#2 生成LassoCV实例（默认超参数搜索范围）\n",
    "lasso = LassoCV()  \n",
    "\n",
    "#3. 训练（内含CV）\n",
    "lasso.fit(X_train, y_train)  \n",
    "\n",
    "#4. 测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print(\"The r2 score of LassoCV on test is ：%.20f\" %r2_score(y_test, y_test_pred_lasso))\n",
    "print(\"The r2 score of LassoCV on train is ：%.20f\" %r2_score(y_train, y_train_pred_lasso))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 0.00019285745527190088\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>[0.5151029311609588]</td>\n",
       "      <td>[0.46559729233494607]</td>\n",
       "      <td>0.509512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>[0.10018779477777567]</td>\n",
       "      <td>[0.0828682003100277]</td>\n",
       "      <td>0.090193</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>[0.07838495483584375]</td>\n",
       "      <td>[0.07755926061896923]</td>\n",
       "      <td>0.075613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>[0.06932750623049581]</td>\n",
       "      <td>[0.07109040560503967]</td>\n",
       "      <td>0.067363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>[0.007636173067164825]</td>\n",
       "      <td>[-0.0037058307682041464]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>[-0.01601725227529463]</td>\n",
       "      <td>[-0.009662811098103297]</td>\n",
       "      <td>-0.008699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>[-0.03566506855133818]</td>\n",
       "      <td>[-0.03945151687432556]</td>\n",
       "      <td>-0.028370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>[-0.12404001255162905]</td>\n",
       "      <td>[-0.09357594454221778]</td>\n",
       "      <td>-0.110501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>[-0.1385290817009251]</td>\n",
       "      <td>[-0.10270045530118083]</td>\n",
       "      <td>-0.109244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>[-0.14637245488459125]</td>\n",
       "      <td>[-0.15163578675419334]</td>\n",
       "      <td>-0.146554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>[-0.37826036389911566]</td>\n",
       "      <td>[-0.2992719405522699]</td>\n",
       "      <td>-0.339432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>[-0.46676495612966323]</td>\n",
       "      <td>[-0.44808971188918206]</td>\n",
       "      <td>-0.473091</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns                 coef_lr                coef_ridge  coef_lasso\n",
       "5        RM    [0.5151029311609588]     [0.46559729233494607]    0.509512\n",
       "1        ZN   [0.10018779477777567]      [0.0828682003100277]    0.090193\n",
       "3      CHAS   [0.07838495483584375]     [0.07755926061896923]    0.075613\n",
       "10        B   [0.06932750623049581]     [0.07109040560503967]    0.067363\n",
       "8       TAX  [0.007636173067164825]  [-0.0037058307682041464]   -0.000000\n",
       "6       AGE  [-0.01601725227529463]   [-0.009662811098103297]   -0.008699\n",
       "2     INDUS  [-0.03566506855133818]    [-0.03945151687432556]   -0.028370\n",
       "4       NOX  [-0.12404001255162905]    [-0.09357594454221778]   -0.110501\n",
       "0      CRIM   [-0.1385290817009251]    [-0.10270045530118083]   -0.109244\n",
       "9   PTRATIO  [-0.14637245488459125]    [-0.15163578675419334]   -0.146554\n",
       "7       DIS  [-0.37826036389911566]     [-0.2992719405522699]   -0.339432\n",
       "11    LSTAT  [-0.46676495612966323]    [-0.44808971188918206]   -0.473091"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最小二乘： 适用与特征之间相关性不强的数据\n",
    "\n",
    "岭回归： 适用与特征之间有一些相关性的数据\n",
    "\n",
    "Lasso回归： 适用与特征之前有很多强相关性的数据\n",
    "\n",
    "最小二乘线性回归中，目标函数只考虑了模型对训练样本的拟合程度，容易过拟合。\n",
    "​岭回归使得线性回归系数收缩，模型稳定。当输入特征之间存在共线性时使用较好。 \n",
    "​lasso也会收缩回归系数。当正则参数取合适值时，使得有些线性回归系数为0，得到稀疏模型。 当输入特征多，有些特征与目标变量之间相关性很弱时，可能只选择强相关的特征，模型解释性好。 通过模型结果来看，不同模型中各个变量的比重不同。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
